<?php
namespace app\index\model;

/**
 * 引入模型基类
 */
use think\Model;

/**
 * 回复模型类
 * 负责处理留言回复相关的数据库操作
 */
class Reply extends Model
{
    /**
     * 设置数据表名
     * @var string
     */
    protected $table = 'mb_reply';
    
    /**
     * 自动写入时间戳设置
     * @var string 时间格式为datetime类型
     */
    protected $autoWriteTimestamp = 'datetime';
    
    /**
     * 创建时间字段
     * @var string
     */
    protected $createTime = 'create_time';
    
    /**
     * 更新时间字段
     * @var string
     */
    protected $updateTime = 'update_time';

    /**
     * 关联用户表
     * 定义回复与用户的多对一关联关系
     * 
     * @return \think\model\relation\BelongsTo
     */
    public function user()
    {
        return $this->belongsTo('User', 'user_id');
    }

    /**
     * 关联留言表
     * 定义回复与留言的多对一关联关系
     * 
     * @return \think\model\relation\BelongsTo
     */
    public function message()
    {
        return $this->belongsTo('Message', 'message_id');
    }

    /**
     * 发表回复
     * 创建新的回复记录
     * 
     * @param array $data 回复数据
     * @return array 操作结果
     */
    public function publish($data)
    {
        // 设置回复关联的留言ID
        $this->message_id = $data['message_id'];
        // 设置回复的用户ID
        $this->user_id = $data['user_id'];
        // 设置回复内容
        $this->content = $data['content'];
        // 设置回复状态为1（正常）
        $this->status = 1;

        // 保存回复并返回结果
        if ($this->save()) {
            return ['status' => 1, 'msg' => '回复成功', 'data' => $this];
        }
        return ['status' => 0, 'msg' => '回复失败'];
    }

    /**
     * 获取回复列表
     * 根据留言ID获取该留言下的所有回复
     * 
     * @param int $messageId 留言ID
     * @return array 回复列表
     */
    public function getList($messageId)
    {
        // 关联查询用户信息
        return $this->with('user')
            ->where([
                'message_id' => $messageId,  // 指定留言ID
                'status' => 1  // 只查询状态为1（正常）的回复
            ])
            // 按创建时间升序排序（最早的在前）
            ->order('create_time', 'asc')
            // 查询所有符合条件的记录
            ->select();
    }

    /**
     * 删除回复（软删除）
     * 将回复状态设为0表示删除
     * 
     * @param int $id 回复ID
     * @param int $userId 当前用户ID（用于权限验证）
     * @return array 操作结果
     */
    public function remove($id, $userId)
    {
        // 查找符合条件的回复
        $reply = $this->where([
            'id' => $id,
            'user_id' => $userId,  // 确保只能删除自己的回复
            'status' => 1  // 只能删除状态为1（正常）的回复
        ])->find();

        // 检查回复是否存在且属于当前用户
        if (!$reply) {
            return ['status' => 0, 'msg' => '回复不存在或无权删除'];
        }

        // 将状态设为0（表示删除）
        $reply->status = 0;
        if ($reply->save()) {
            return ['status' => 1, 'msg' => '删除成功'];
        }
        return ['status' => 0, 'msg' => '删除失败'];
    }
} 